<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/linux/percpu-defs.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/linux/percpu-defs.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX1BFUkNQVV9ERUZTX0hfMA__"><span class="b">_LINUX_PERCPU_DEFS_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0xJTlVYX1BFUkNQVV9ERUZTX0hfMA__"><span class="b">_LINUX_PERCPU_DEFS_H</span></a>
<a name="3" /><span class="True">       3:</span> 
<a name="4" /><span class="True">       4:</span> <span class="k">/*</span>
<a name="5" /><span class="True">       5:</span> <span class="k"> * Base implementations of per-CPU variable declarations and definitions, where</span>
<a name="6" /><span class="True">       6:</span> <span class="k"> * the section in which the variable is to be placed is provided by the</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> * &apos;sec&apos; argument.  This may be used to affect the parameters governing the</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> * variable&apos;s storage.</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> *</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> * NOTE!  The sections for the DECLARE and for the DEFINE must match, lest</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> * linkage errors occur due the compiler generating the wrong code to access</span>
<a name="12" /><span class="True">      12:</span> <span class="k"> * that section.</span>
<a name="13" /><span class="True">      13:</span> <span class="k"> */</span>
<a name="14" /><span class="True">      14:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X19QQ1BVX0FUVFJTXzA_"><span class="b">__PCPU_ATTRS</span></a><span class="f">(</span><span class="b">sec</span><span class="f">)</span>                        \
<a name="15" /><span class="True">      15:</span>     <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfMA__"><span class="b">__percpu</span></a> <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">section</span><span class="f">(</span><a href="cpu.c_macros_ref.html#_UEVSX0NQVV9CQVNFX1NFQ1RJT05fMA__"><span class="b">PER_CPU_BASE_SECTION</span></a> <span class="b">sec</span><span class="f">)</span><span class="f">)</span><span class="f">)</span>    \
<a name="16" /><span class="True">      16:</span>     <a href="cpu.c_macros_ref.html#_UEVSX0NQVV9BVFRSSUJVVEVTXzA_"><span class="b">PER_CPU_ATTRIBUTES</span></a>
<a name="17" /><span class="True">      17:</span> 
<a name="18" /><span class="True">      18:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X19QQ1BVX0RVTU1ZX0FUVFJTXzA_"><span class="b">__PCPU_DUMMY_ATTRS</span></a>                        \
<a name="19" /><span class="True">      19:</span>     <span class="b">__attribute__</span><span class="f">(</span><span class="f">(</span><span class="b">section</span><span class="f">(</span><span class="e">&quot;.discard&quot;</span><span class="f">)</span><span class="f">,</span> <span class="b">unused</span><span class="f">)</span><span class="f">)</span>
<a name="20" /><span class="True">      20:</span> 
<a name="21" /><span class="True">      21:</span> <span class="k">/*</span>
<a name="22" /><span class="True">      22:</span> <span class="k"> * Macro which verifies @ptr is a percpu pointer without evaluating</span>
<a name="23" /><span class="True">      23:</span> <span class="k"> * @ptr.  This is to be used in percpu accessors to verify that the</span>
<a name="24" /><span class="True">      24:</span> <span class="k"> * input parameter is a percpu pointer.</span>
<a name="25" /><span class="True">      25:</span> <span class="k"> *</span>
<a name="26" /><span class="True">      26:</span> <span class="k"> * + 0 is required in order to convert the pointer type from a</span>
<a name="27" /><span class="True">      27:</span> <span class="k"> * potential array type to a pointer to a single item of the array.</span>
<a name="28" /><span class="True">      28:</span> <span class="k"> */</span>
<a name="29" /><span class="True">      29:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_X192ZXJpZnlfcGNwdV9wdHJfMA__"><span class="b">__verify_pcpu_ptr</span></a><span class="f">(</span><span class="b">ptr</span><span class="f">)</span>    <span class="m">do</span> <span class="f">{</span>                    \
<a name="30" /><span class="True">      30:</span>     <span class="m">const</span> <span class="m">void</span> <a href="cpu.c_macros_ref.html#_X19wZXJjcHVfMA__"><span class="b">__percpu</span></a> <span class="f">*</span><span class="b">__vpp_verify</span> <span class="f">=</span> <span class="f">(</span><span class="b">typeof</span><span class="f">(</span><span class="f">(</span><span class="b">ptr</span><span class="f">)</span> <span class="f">+</span> <span class="c">0</span><span class="f">)</span><span class="f">)</span><a href="cpu.c_macros_ref.html#_TlVMTF8w"><span class="b">NULL</span></a><span class="f">;</span>    \
<a name="31" /><span class="True">      31:</span>     <span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="b">__vpp_verify</span><span class="f">;</span>                        \
<a name="32" /><span class="True">      32:</span> <span class="f">}</span> <span class="m">while</span> <span class="f">(</span><span class="c">0</span><span class="f">)</span>
<a name="33" /><span class="True">      33:</span> 
<a name="34" /><span class="True">      34:</span> <span class="k">/*</span>
<a name="35" /><span class="True">      35:</span> <span class="k"> * s390 and alpha modules require percpu variables to be defined as</span>
<a name="36" /><span class="True">      36:</span> <span class="k"> * weak to force the compiler to generate GOT based external</span>
<a name="37" /><span class="True">      37:</span> <span class="k"> * references for them.  This is necessary because percpu sections</span>
<a name="38" /><span class="True">      38:</span> <span class="k"> * will be located outside of the usually addressable area.</span>
<a name="39" /><span class="True">      39:</span> <span class="k"> *</span>
<a name="40" /><span class="True">      40:</span> <span class="k"> * This definition puts the following two extra restrictions when</span>
<a name="41" /><span class="True">      41:</span> <span class="k"> * defining percpu variables.</span>
<a name="42" /><span class="True">      42:</span> <span class="k"> *</span>
<a name="43" /><span class="True">      43:</span> <span class="k"> * 1. The symbol must be globally unique, even the static ones.</span>
<a name="44" /><span class="True">      44:</span> <span class="k"> * 2. Static percpu variables cannot be defined inside a function.</span>
<a name="45" /><span class="True">      45:</span> <span class="k"> *</span>
<a name="46" /><span class="True">      46:</span> <span class="k"> * Archs which need weak percpu definitions should define</span>
<a name="47" /><span class="True">      47:</span> <span class="k"> * ARCH_NEEDS_WEAK_PER_CPU in asm/percpu.h when necessary.</span>
<a name="48" /><span class="True">      48:</span> <span class="k"> *</span>
<a name="49" /><span class="True">      49:</span> <span class="k"> * To ensure that the generic code observes the above two</span>
<a name="50" /><span class="True">      50:</span> <span class="k"> * restrictions, if CONFIG_DEBUG_FORCE_WEAK_PER_CPU is set weak</span>
<a name="51" /><span class="True">      51:</span> <span class="k"> * definition is used for all cases.</span>
<a name="52" /><span class="True">      52:</span> <span class="k"> */</span>
<a name="53" /><span class="False">      53:</span> <span class="f">#</span><span class="n">if</span> <span class="b">defined</span><span class="f">(</span><span class="b">ARCH_NEEDS_WEAK_PER_CPU</span><span class="f">)</span> <span class="f">||</span> <span class="b">defined</span><span class="f">(</span><span class="b">CONFIG_DEBUG_FORCE_WEAK_PER_CPU</span><span class="f">)</span>
<a name="54" /><span class="False">      54:</span> <span class="k">/*</span>
<a name="55" /><span class="False">      55:</span> <span class="k"> * __pcpu_scope_* dummy variable is used to enforce scope.  It</span>
<a name="56" /><span class="False">      56:</span> <span class="k"> * receives the static modifier when it&apos;s used in front of</span>
<a name="57" /><span class="False">      57:</span> <span class="k"> * DEFINE_PER_CPU() and will trigger build failure if</span>
<a name="58" /><span class="False">      58:</span> <span class="k"> * DECLARE_PER_CPU() is used for the same variable.</span>
<a name="59" /><span class="False">      59:</span> <span class="k"> *</span>
<a name="60" /><span class="False">      60:</span> <span class="k"> * __pcpu_unique_* dummy variable is used to enforce symbol uniqueness</span>
<a name="61" /><span class="False">      61:</span> <span class="k"> * such that hidden weak symbol collision, which will cause unrelated</span>
<a name="62" /><span class="False">      62:</span> <span class="k"> * variables to share the same address, can be detected during build.</span>
<a name="63" /><span class="False">      63:</span> <span class="k"> */</span>
<a name="64" /><span class="False">      64:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1NFQ1RJT05fMA__"><span class="b">DECLARE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <span class="b">sec</span><span class="f">)</span>            \
<a name="65" /><span class="False">      65:</span>     <span class="m">extern</span> <a href="cpu.c_macros_noref.html#_X19QQ1BVX0RVTU1ZX0FUVFJTXzA_"><span class="b">__PCPU_DUMMY_ATTRS</span></a> <span class="m">char</span> <span class="b">__pcpu_scope_</span><span class="f">##</span><span class="b">name</span><span class="f">;</span>        \
<a name="66" /><span class="False">      66:</span>     <span class="m">extern</span> <a href="cpu.c_macros_ref.html#_X19QQ1BVX0FUVFJTXzA_"><span class="b">__PCPU_ATTRS</span></a><span class="f">(</span><span class="b">sec</span><span class="f">)</span> <span class="b">__typeof__</span><span class="f">(</span><span class="b">type</span><span class="f">)</span> <span class="b">name</span>
<a name="67" /><span class="False">      67:</span> 
<a name="68" /><span class="False">      68:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfU0VDVElPTl8w"><span class="b">DEFINE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <span class="b">sec</span><span class="f">)</span>                \
<a name="69" /><span class="False">      69:</span>     <a href="cpu.c_macros_noref.html#_X19QQ1BVX0RVTU1ZX0FUVFJTXzA_"><span class="b">__PCPU_DUMMY_ATTRS</span></a> <span class="m">char</span> <span class="b">__pcpu_scope_</span><span class="f">##</span><span class="b">name</span><span class="f">;</span>            \
<a name="70" /><span class="False">      70:</span>     <span class="m">extern</span> <a href="cpu.c_macros_noref.html#_X19QQ1BVX0RVTU1ZX0FUVFJTXzA_"><span class="b">__PCPU_DUMMY_ATTRS</span></a> <span class="m">char</span> <span class="b">__pcpu_unique_</span><span class="f">##</span><span class="b">name</span><span class="f">;</span>        \
<a name="71" /><span class="False">      71:</span>     <a href="cpu.c_macros_noref.html#_X19QQ1BVX0RVTU1ZX0FUVFJTXzA_"><span class="b">__PCPU_DUMMY_ATTRS</span></a> <span class="m">char</span> <span class="b">__pcpu_unique_</span><span class="f">##</span><span class="b">name</span><span class="f">;</span>            \
<a name="72" /><span class="False">      72:</span>     <span class="m">extern</span> <a href="cpu.c_macros_ref.html#_X19QQ1BVX0FUVFJTXzA_"><span class="b">__PCPU_ATTRS</span></a><span class="f">(</span><span class="b">sec</span><span class="f">)</span> <span class="b">__typeof__</span><span class="f">(</span><span class="b">type</span><span class="f">)</span> <span class="b">name</span><span class="f">;</span>            \
<a name="73" /><span class="False">      73:</span>     <a href="cpu.c_macros_ref.html#_X19QQ1BVX0FUVFJTXzA_"><span class="b">__PCPU_ATTRS</span></a><span class="f">(</span><span class="b">sec</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_UEVSX0NQVV9ERUZfQVRUUklCVVRFU18w"><span class="b">PER_CPU_DEF_ATTRIBUTES</span></a> <a href="cpu.c_macros_ref.html#_X193ZWFrXzA_"><span class="b">__weak</span></a>            \
<a name="74" /><span class="False">      74:</span>     <span class="b">__typeof__</span><span class="f">(</span><span class="b">type</span><span class="f">)</span> <span class="b">name</span>
<a name="75" /><span class="True">      75:</span> <span class="f">#</span><span class="n">else</span>
<a name="76" /><span class="True">      76:</span> <span class="k">/*</span>
<a name="77" /><span class="True">      77:</span> <span class="k"> * Normal declaration and definition macros.</span>
<a name="78" /><span class="True">      78:</span> <span class="k"> */</span>
<a name="79" /><span class="True">      79:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1NFQ1RJT05fMA__"><span class="b">DECLARE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <span class="b">sec</span><span class="f">)</span>            \
<a name="80" /><span class="True">      80:</span>     <span class="m">extern</span> <a href="cpu.c_macros_ref.html#_X19QQ1BVX0FUVFJTXzA_"><span class="b">__PCPU_ATTRS</span></a><span class="f">(</span><span class="b">sec</span><span class="f">)</span> <span class="b">__typeof__</span><span class="f">(</span><span class="b">type</span><span class="f">)</span> <span class="b">name</span>
<a name="81" /><span class="True">      81:</span> 
<a name="82" /><span class="True">      82:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfU0VDVElPTl8w"><span class="b">DEFINE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <span class="b">sec</span><span class="f">)</span>                \
<a name="83" /><span class="True">      83:</span>     <a href="cpu.c_macros_ref.html#_X19QQ1BVX0FUVFJTXzA_"><span class="b">__PCPU_ATTRS</span></a><span class="f">(</span><span class="b">sec</span><span class="f">)</span> <a href="cpu.c_macros_noref.html#_UEVSX0NQVV9ERUZfQVRUUklCVVRFU18w"><span class="b">PER_CPU_DEF_ATTRIBUTES</span></a>            \
<a name="84" /><span class="True">      84:</span>     <span class="b">__typeof__</span><span class="f">(</span><span class="b">type</span><span class="f">)</span> <span class="b">name</span>
<a name="85" /><span class="True">      85:</span> <span class="f">#</span><span class="n">endif</span>
<a name="86" /><span class="True">      86:</span> 
<a name="87" /><span class="True">      87:</span> <span class="k">/*</span>
<a name="88" /><span class="True">      88:</span> <span class="k"> * Variant on the per-CPU variable declaration/definition theme used for</span>
<a name="89" /><span class="True">      89:</span> <span class="k"> * ordinary per-CPU variables.</span>
<a name="90" /><span class="True">      90:</span> <span class="k"> */</span>
<a name="91" /><span class="True">      91:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVXzA_"><span class="b">DECLARE_PER_CPU</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>                    \
<a name="92" /><span class="True">      92:</span>     <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1NFQ1RJT05fMA__"><span class="b">DECLARE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <span class="e">&quot;&quot;</span><span class="f">)</span>
<a name="93" /><span class="True">      93:</span> 
<a name="94" /><span class="True">      94:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfMA__"><span class="b">DEFINE_PER_CPU</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>                    \
<a name="95" /><span class="True">      95:</span>     <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfU0VDVElPTl8w"><span class="b">DEFINE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <span class="e">&quot;&quot;</span><span class="f">)</span>
<a name="96" /><span class="True">      96:</span> 
<a name="97" /><span class="True">      97:</span> <span class="k">/*</span>
<a name="98" /><span class="True">      98:</span> <span class="k"> * Declaration/definition used for per-CPU variables that must come first in</span>
<a name="99" /><span class="True">      99:</span> <span class="k"> * the set of variables.</span>
<a name="100" /><span class="True">     100:</span> <span class="k"> */</span>
<a name="101" /><span class="True">     101:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX0ZJUlNUXzA_"><span class="b">DECLARE_PER_CPU_FIRST</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>                \
<a name="102" /><span class="True">     102:</span>     <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1NFQ1RJT05fMA__"><span class="b">DECLARE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_UEVSX0NQVV9GSVJTVF9TRUNUSU9OXzA_"><span class="b">PER_CPU_FIRST_SECTION</span></a><span class="f">)</span>
<a name="103" /><span class="True">     103:</span> 
<a name="104" /><span class="True">     104:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfRklSU1RfMA__"><span class="b">DEFINE_PER_CPU_FIRST</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>                \
<a name="105" /><span class="True">     105:</span>     <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfU0VDVElPTl8w"><span class="b">DEFINE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_UEVSX0NQVV9GSVJTVF9TRUNUSU9OXzA_"><span class="b">PER_CPU_FIRST_SECTION</span></a><span class="f">)</span>
<a name="106" /><span class="True">     106:</span> 
<a name="107" /><span class="True">     107:</span> <span class="k">/*</span>
<a name="108" /><span class="True">     108:</span> <span class="k"> * Declaration/definition used for per-CPU variables that must be cacheline</span>
<a name="109" /><span class="True">     109:</span> <span class="k"> * aligned under SMP conditions so that, whilst a particular instance of the</span>
<a name="110" /><span class="True">     110:</span> <span class="k"> * data corresponds to a particular CPU, inefficiencies due to direct access by</span>
<a name="111" /><span class="True">     111:</span> <span class="k"> * other CPUs are reduced by preventing the data from unnecessarily spanning</span>
<a name="112" /><span class="True">     112:</span> <span class="k"> * cachelines.</span>
<a name="113" /><span class="True">     113:</span> <span class="k"> *</span>
<a name="114" /><span class="True">     114:</span> <span class="k"> * An example of this would be statistical data, where each CPU&apos;s set of data</span>
<a name="115" /><span class="True">     115:</span> <span class="k"> * is updated by that CPU alone, but the data from across all CPUs is collated</span>
<a name="116" /><span class="True">     116:</span> <span class="k"> * by a CPU processing a read from a proc file.</span>
<a name="117" /><span class="True">     117:</span> <span class="k"> */</span>
<a name="118" /><span class="True">     118:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEXzA_"><span class="b">DECLARE_PER_CPU_SHARED_ALIGNED</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>            \
<a name="119" /><span class="True">     119:</span>     <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1NFQ1RJT05fMA__"><span class="b">DECLARE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_UEVSX0NQVV9TSEFSRURfQUxJR05FRF9TRUNUSU9OXzA_"><span class="b">PER_CPU_SHARED_ALIGNED_SECTION</span></a><span class="f">)</span> \
<a name="120" /><span class="True">     120:</span>     <a href="cpu.c_macros_ref.html#_X19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcF8w"><span class="b">____cacheline_aligned_in_smp</span></a>
<a name="121" /><span class="True">     121:</span> 
<a name="122" /><span class="True">     122:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORURfMA__"><span class="b">DEFINE_PER_CPU_SHARED_ALIGNED</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>            \
<a name="123" /><span class="True">     123:</span>     <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfU0VDVElPTl8w"><span class="b">DEFINE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <a href="cpu.c_macros_ref.html#_UEVSX0NQVV9TSEFSRURfQUxJR05FRF9TRUNUSU9OXzA_"><span class="b">PER_CPU_SHARED_ALIGNED_SECTION</span></a><span class="f">)</span> \
<a name="124" /><span class="True">     124:</span>     <a href="cpu.c_macros_ref.html#_X19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcF8w"><span class="b">____cacheline_aligned_in_smp</span></a>
<a name="125" /><span class="True">     125:</span> 
<a name="126" /><span class="True">     126:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVDTEFSRV9QRVJfQ1BVX0FMSUdORURfMA__"><span class="b">DECLARE_PER_CPU_ALIGNED</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>                \
<a name="127" /><span class="True">     127:</span>     <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1NFQ1RJT05fMA__"><span class="b">DECLARE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_UEVSX0NQVV9BTElHTkVEX1NFQ1RJT05fMA__"><span class="b">PER_CPU_ALIGNED_SECTION</span></a><span class="f">)</span>    \
<a name="128" /><span class="True">     128:</span>     <a href="cpu.c_macros_ref.html#_X19fX2NhY2hlbGluZV9hbGlnbmVkXzA_"><span class="b">____cacheline_aligned</span></a>
<a name="129" /><span class="True">     129:</span> 
<a name="130" /><span class="True">     130:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfQUxJR05FRF8w"><span class="b">DEFINE_PER_CPU_ALIGNED</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>                \
<a name="131" /><span class="True">     131:</span>     <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfU0VDVElPTl8w"><span class="b">DEFINE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <a href="cpu.c_macros_noref.html#_UEVSX0NQVV9BTElHTkVEX1NFQ1RJT05fMA__"><span class="b">PER_CPU_ALIGNED_SECTION</span></a><span class="f">)</span>    \
<a name="132" /><span class="True">     132:</span>     <a href="cpu.c_macros_ref.html#_X19fX2NhY2hlbGluZV9hbGlnbmVkXzA_"><span class="b">____cacheline_aligned</span></a>
<a name="133" /><span class="True">     133:</span> 
<a name="134" /><span class="True">     134:</span> <span class="k">/*</span>
<a name="135" /><span class="True">     135:</span> <span class="k"> * Declaration/definition used for per-CPU variables that must be page aligned.</span>
<a name="136" /><span class="True">     136:</span> <span class="k"> */</span>
<a name="137" /><span class="True">     137:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVDTEFSRV9QRVJfQ1BVX1BBR0VfQUxJR05FRF8w"><span class="b">DECLARE_PER_CPU_PAGE_ALIGNED</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>            \
<a name="138" /><span class="True">     138:</span>     <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1NFQ1RJT05fMA__"><span class="b">DECLARE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <span class="e">&quot;..page_aligned&quot;</span><span class="f">)</span>        \
<a name="139" /><span class="True">     139:</span>     <a href="cpu.c_macros_ref.html#_X19hbGlnbmVkXzA_"><span class="b">__aligned</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_UEFHRV9TSVpFXzA_"><span class="b">PAGE_SIZE</span></a><span class="f">)</span>
<a name="140" /><span class="True">     140:</span> 
<a name="141" /><span class="True">     141:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEXzA_"><span class="b">DEFINE_PER_CPU_PAGE_ALIGNED</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>                \
<a name="142" /><span class="True">     142:</span>     <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfU0VDVElPTl8w"><span class="b">DEFINE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <span class="e">&quot;..page_aligned&quot;</span><span class="f">)</span>        \
<a name="143" /><span class="True">     143:</span>     <a href="cpu.c_macros_ref.html#_X19hbGlnbmVkXzA_"><span class="b">__aligned</span></a><span class="f">(</span><a href="cpu.c_macros_ref.html#_UEFHRV9TSVpFXzA_"><span class="b">PAGE_SIZE</span></a><span class="f">)</span>
<a name="144" /><span class="True">     144:</span> 
<a name="145" /><span class="True">     145:</span> <span class="k">/*</span>
<a name="146" /><span class="True">     146:</span> <span class="k"> * Declaration/definition used for per-CPU variables that must be read mostly.</span>
<a name="147" /><span class="True">     147:</span> <span class="k"> */</span>
<a name="148" /><span class="True">     148:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1JFQURfTU9TVExZXzA_"><span class="b">DECLARE_PER_CPU_READ_MOSTLY</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>            \
<a name="149" /><span class="True">     149:</span>     <a href="cpu.c_macros_ref.html#_REVDTEFSRV9QRVJfQ1BVX1NFQ1RJT05fMA__"><span class="b">DECLARE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <span class="e">&quot;..readmostly&quot;</span><span class="f">)</span>
<a name="150" /><span class="True">     150:</span> 
<a name="151" /><span class="True">     151:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfUkVBRF9NT1NUTFlfMA__"><span class="b">DEFINE_PER_CPU_READ_MOSTLY</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">)</span>                \
<a name="152" /><span class="True">     152:</span>     <a href="cpu.c_macros_noref.html#_REVGSU5FX1BFUl9DUFVfU0VDVElPTl8w"><span class="b">DEFINE_PER_CPU_SECTION</span></a><span class="f">(</span><span class="b">type</span><span class="f">,</span> <span class="b">name</span><span class="f">,</span> <span class="e">&quot;..readmostly&quot;</span><span class="f">)</span>
<a name="153" /><span class="True">     153:</span> 
<a name="154" /><span class="True">     154:</span> <span class="k">/*</span>
<a name="155" /><span class="True">     155:</span> <span class="k"> * Intermodule exports for per-CPU variables.  sparse forgets about</span>
<a name="156" /><span class="True">     156:</span> <span class="k"> * address space across EXPORT_SYMBOL(), change EXPORT_SYMBOL() to</span>
<a name="157" /><span class="True">     157:</span> <span class="k"> * noop if __CHECKER__.</span>
<a name="158" /><span class="True">     158:</span> <span class="k"> */</span>
<a name="159" /><span class="True">     159:</span> <span class="f">#</span><span class="n">ifndef</span> <span class="b">__CHECKER__</span>
<a name="160" /><span class="True">     160:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1BFUl9DUFVfU1lNQk9MXzA_"><span class="b">EXPORT_PER_CPU_SYMBOL</span></a><span class="f">(</span><span class="b">var</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_RVhQT1JUX1NZTUJPTF8w"><span class="b">EXPORT_SYMBOL</span></a><span class="f">(</span><span class="b">var</span><span class="f">)</span>
<a name="161" /><span class="True">     161:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTF8w"><span class="b">EXPORT_PER_CPU_SYMBOL_GPL</span></a><span class="f">(</span><span class="b">var</span><span class="f">)</span> <a href="cpu.c_macros_ref.html#_RVhQT1JUX1NZTUJPTF9HUExfMA__"><span class="b">EXPORT_SYMBOL_GPL</span></a><span class="f">(</span><span class="b">var</span><span class="f">)</span>
<a name="162" /><span class="False">     162:</span> <span class="f">#</span><span class="n">else</span>
<a name="163" /><span class="False">     163:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1BFUl9DUFVfU1lNQk9MXzA_"><span class="b">EXPORT_PER_CPU_SYMBOL</span></a><span class="f">(</span><span class="b">var</span><span class="f">)</span>
<a name="164" /><span class="False">     164:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_RVhQT1JUX1BFUl9DUFVfU1lNQk9MX0dQTF8w"><span class="b">EXPORT_PER_CPU_SYMBOL_GPL</span></a><span class="f">(</span><span class="b">var</span><span class="f">)</span>
<a name="165" /><span class="True">     165:</span> <span class="f">#</span><span class="n">endif</span>
<a name="166" /><span class="True">     166:</span> 
<a name="167" /><span class="True">     167:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _LINUX_PERCPU_DEFS_H */</span>
<a name="168" /><span class="True">     168:</span> </pre>
  </body>
</html>
